﻿
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
using System.Data.SqlClient;
using System.Data;
using System.Drawing;
using Website.Logger;
using DAL;
using BOL;
using System.Web.Script.Services;
using System.Web.Services;
using WebLib;
using UtilityExtensions;
using BOL.CentroCosto;

namespace UILGestion.ObraAdmin.RecepcionDoc
{
    public partial class RecepcionDocInsertForm : System.Web.UI.Page
    {


        public RecepcionDocInsertForm()
        {
            bol = new RecepcionDocBL();
            proveedor = new ProveedorBL();
             list = new ListValueBL();
        }

        private RecepcionDocBL bol;
        private static ProveedorBL proveedor;
        private ListValueBL list;


        [WebMethod]
        public static double Tot(double Valor1, double Valor2)
        {
            return Valor1 + Valor2;
        }


        [WebMethod(), ScriptMethod()]
        public static string GetOrdenCompraItem(String prefixText, String contextKey)
        {
            //para este caso el contextKey es la orden de compra

            var q= from a in DbUtil.Db.OrdenCompraItems
                   where a.idOrdenCompra==contextKey.ToInt()
                       & a.Descripcion.Contains(prefixText)
                       select a.Descripcion;


            return Util.ListStringToString(q.ToList());

        }

       


        [WebMethod(), ScriptMethod()]
        public static string GetProveedor(String prefixText, String contextKey)
        {
            ProveedorBL bol = new ProveedorBL();


            return bol.getProveedorMasEmpleadoAll(prefixText, 20);
        }

        private void LoadRecepcionDoc(int idRececpcionDoc)
        {

            //RecepcionDocBL bol = new RecepcionDocBL();
            //RecepcionDocInfo info = bol.loadRecepcionDoc(idRececpcionDoc);

            //docRefHLK.Text = info.numOrdenCompra;
            //ordenCompraLinkButton.Text = info.proveedor;
            //simbolLabel1.Text = info.simbol;
            //simbolLabel2.Text = info.simbol;
            //simbolLabel3.Text = info.simbol;
            //netoLabel.Text = info.neto.ToString("N");
            //igvtotalLabel.Text = info.igvtotal.ToString("N");
            //totalTextBox.Text = info.total.ToString("N");
            //monedaLabel.Text = info.moneda;
            //formaPagoLabel.Text = info.formaPago;
            //fechaOCLabel.Text = info.fechaOrdenCompra.ToShortDateString();
            //fechaTextBox.Text = info.fecha.ToShortDateString();
            //fechaEmisonTextBox.Text = info.fechaEmisionDoc.ToShortDateString();
            //fechaVencimTextBox.Text = info.fechaVencimientoDoc.ToShortDateString();
            //TipoCambioLabel.Text = info.tipoCambioDollar.ToString();
            //monedaDropDownList.SelectedValue = info.idMoneda.ToString();
            //tipoDocDropDownList.SelectedValue = info.idDocumentoTipo.ToString();
            //documentoTextBox.Text = info.numDocumento;
            //idordenCompra.Text = info.idOrdenCompra.ToString();
            //frLabel.Text = info.numRecepcion;

            //DocumentoUpdatePanel.Update();

        }
    

        private void FormatForm()
        {
            //--------------------
            int idEmpleadoEmisor = int.Parse(System.Web.HttpContext.Current.Session["idEmpleado"].ToString());
            bool acceso = new DAL.FormularioAcceso().VerificarAcceso(DbUtil.Db,
                idEmpleadoEmisor,
                9, //FR
                int.Parse(idObra.Value),
                2); //lectura
            //------------------------- 
            // los paneles presentes en el formulario
            pnlMain.Visible = true;

            ShowAllComboBoxNew();
           
            

            fechaTextBox.Text = DateTime.Now.ToShortDateString();
            FecharecepcionTXT.Text = DateTime.Now.ToShortDateString();
            DAL.RecepcionDoc rec = new DAL.RecepcionDoc();
            frLabel.Text = rec.getCorrelativo(DbUtil.Db, int.Parse(idObra.Value));
            
            FRUNITXT.Text = frLabel.Text;

            if (type.Value == "A")
            {
               // SI ES UNA FACTURA,BOLETA  ,etc  DESDE ORDEN DE COMPRA
                
                var oc = DbUtil.Db.OrdenCompras.SingleOrDefault(p => p.idInternal == idordenCompra.Text.ToInt());
                LoadDocumento(oc);
       
            }
            if (type.Value == "NC")
            {
               // SI ES NOTA DE CREDITO
               string idrecepcionDoc=  (string)Request.QueryString["idFR"];

                var recepcionDoc=DbUtil.Db.RecepcionDocs.Single(p=>p.idInternal==idrecepcionDoc.ToInt());
                
                LoadDocumento(recepcionDoc.OrdenCompra);
                idordenCompra.Text= recepcionDoc.idOrden.ToString();
                
                facturaHLK.Text=string.Format("{0}: {1} ",recepcionDoc.DocumentoTipo.abreviacion,recepcionDoc.numDocumento);
                facturaHLK.NavigateUrl = string.Format("RecepcionDocReadForm.aspx?idObra={0}&id={1}",idObra.Value,idrecepcionDoc);

                //nuevo documento con nota de credito
               
                tipoDocDropDownList.SelectedValue = "6";
                tipoDocDropDownList.Enabled = false;


            }
            
            
            
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {


                if (!Page.IsPostBack)
                {
                    idObra.Value = (string)Request.QueryString["idObra"];
                    idordenCompra.Text = (string)Request.QueryString["idOC"];
                    idordenAnticipo.Value = (string)Request.QueryString["idAnticipo"];
                    type.Value = (string)Request.QueryString["type"];
                    internalid.Value = (string)Request.QueryString["id"];
                    menuObraCtrl1.loadMenu(int.Parse(idObra.Value), Request.AppRelativeCurrentExecutionFilePath);
                    
                   
                    FormatForm();

               

                }


            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }

        }

      
    
        private void ShowAllComboBoxNew()
        {

            List<ListValueInfo> tipodocumentos = list.GetDocumentoTipoRecepcionDoc();
            List<ListValueInfo> monedas = list.GetMoneda();

            tipoDocDropDownList.DataValueField = "idInternal";
            tipoDocDropDownList.DataTextField = "descripcion";

            monedaDropDownList.DataValueField = "idInternal";
            monedaDropDownList.DataTextField = "descripcion";


            fechaPagoDDL.DataValueField = "idInternal";
            fechaPagoDDL.DataTextField = "descripcion";
            fechaPagoDDL.DataSource = list.GetFechaPagoFacturas();
            fechaPagoDDL.DataBind();

            monedaDropDownList.DataSource = monedas;
            tipoDocDropDownList.DataSource = tipodocumentos;
            monedaDropDownList.DataBind();
            tipoDocDropDownList.DataBind();
        }

        protected void btnContinue_OnClick(object sender, EventArgs e)
        {
         
            try
            {
                if ((sender as Button).Text == refreshButton.Text)
                {
                    string idrecepcionDoc = (string)Request.QueryString["idFR"];
                    Response.Redirect("RecepcionDocInsertForm.aspx?idObra={0}&idOC={1}&idAnticipo={2}&type={3}&id={4}&idFR={5}".
                    Fmt(idObra.Value, idordenCompra.Text, idordenAnticipo.Value, type.Value, internalid.Value, idrecepcionDoc));
                }

                if ((sender as Button).Text == saveButton.Text)
                    {
                    
                               
                        if (type.Value == "A")
                        {
                            //si es de caja chica  solo se  es grupo
                            if (tipoDocumentoOrden.Value == "5") //caja chica
                            {
                                InsertGrupo();
                                Response.Redirect("RecepcionDocListForm.aspx?&idObra=" + idObra.Value, false);
                            }
                            else
                            {
                                Insert();
                                Response.Redirect("RecepcionDocReadForm.aspx?id=" + internalid.Value + "&idObra=" + idObra.Value, false);
                            }
                    
                    
                        }
                        if (type.Value == "NC")
                        {
                            Insert();
                            Response.Redirect("RecepcionDocReadForm.aspx?id=" + internalid.Value + "&idObra=" + idObra.Value, false);
                        }

            }
                if ((sender as Button).Text == cancelarButton.Text)
            {
                Response.Redirect("RecepcionDocListForm.aspx?idObra=" + idObra.Value);
            }
           

              
                   }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);
                

            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);
                
            }
        }

       
        //private void Edit()
        //{
        //    //System.IFormatProvider MiFp = new System.Globalization.CultureInfo("es-ES", false);
        //    //    RecepcionDocBL recep= new RecepcionDocBL();

        //    // recep.update(int.Parse(internalid.Value),
        //    //            "",
        //    //       documentoTextBox.Text.Trim(),
        //    //       int.Parse(tipoDocDropDownList.SelectedValue),
        //    //       int.Parse(monedaDropDownList.SelectedValue),
        //    //       0,
        //    //       decimal.Parse(totalTextBox.Text),
        //    //       decimal.Parse(netoLabel.Text),
        //    //       decimal.Parse(igvtotalLabel.Text),
        //    //       DateTime.ParseExact(fechaEmisonTextBox.Text, "dd/MM/yyyy", MiFp),
        //    //       DateTime.ParseExact(fechaVencimTextBox.Text, "dd/MM/yyyy", MiFp),
        //    //       DateTime.ParseExact(fechaTextBox.Text, "dd/MM/yyyy", MiFp),
        //    //       int.Parse(idordenCompra.Value),
        //    //       int.Parse(idObra.Value),
        //    //       decimal.Parse(TipoCambioLabel.Text));

        //}
     
       

        protected void AgregarRecursoLinkButton_Click(object sender, EventArgs e)
        {
            // todas las ordenes de compra sin facturar
            OrdenCompraBL bl= new OrdenCompraBL();
            
           // List<OrdenCompraListInfo>  lista=bl.getOrdenCompraSinFactura(int.Parse(idObra.Value));

            //OrdenCompraGridView.DataSource = lista;
            //OrdenCompraGridView.DataBind();
            //AddECItemUpdatePanel.Update();
            //AddDocumentoPopup.Show();
        }
       

        private void LoadDocumento(OrdenCompra oc)
        {
                     

            if (oc == null) { throw new Exception("No existe el Documento"); }

            string texto=oc.TipoOrden.descripcion;
            tipoDocumentoOrden.Value = oc.idTipoOrden.ToString();

            adelantoPanel.Visible = false;
            GrupoFacturacionPNL.Visible = false;
            facturacionUNOPNL.Visible = false;


            if (oc.bitAnticipo.Value)
            {
                texto = oc.TipoOrden.descripcion + " Anticipo";
                adelantoPanel.Visible = true;
            }
            Ordenpanel.GroupingText=texto;
           
            string numDocumentoStr=String.Format("{0} {1}",oc.TipoOrden.simbol,oc.numDocumento);
            string tipoFormulario = (oc.idTipoOrden > 1 ? "GastoObraReadForm.aspx" : "OrdenCompraReadForm.aspx");
            string simbol = oc.Moneda1.simbol;

            observacionInterLBL.Text=oc.observacionInter;
            observacionLBL.Text = oc.observaciones;


            docRefHLK.Text = numDocumentoStr;
            docRefHLK.NavigateUrl = 
                String.Format("~/ObraAdmin/OrdenCompras/{2}?id={0}&idObra={1}", 
                oc.idInternal, 
                oc.idObra,
                tipoFormulario);


            DAL.Menu menu = DbUtil.Db.Menus.Single(p => p.idInternal == 112);
            //----------------------             
            string val1 = String.Format("{0}?Type=A&id={1}",
                                                        menu.url,
                                                        oc.idProveedor);
            ordenCompraHLk.Text = oc.proveedor;
            ordenCompraHLk.NavigateUrl = "javascript:loadTabFromForm('tab{0}','{1}','{2}');".
                                    Fmt(menu.idAplicacion,
                                    menu.Aplicacion.title,
                                    val1);

            //--------------------




            simbolLabel1.Text = simbol;
            simbolLabel2.Text = simbol;
            simbolLabel3.Text = simbol;
            //IGVValorLBL.Text = oc.igv.ToString();
            
            monedaLabel.Text = oc.moneda;
            formaPagoLabel.Text = oc.FormaPago.descripcion;
            
            idComparativo.Value = oc.idComparativo.ToString();
            
            comparativoHLK.Text = (oc.idComparativo != null ? oc.Comparativo.numDocumento : "");
            comparativoHLK.NavigateUrl = string.Format("~/ObraAdmin/Comparativos/ComparativoReadForm.aspx?id={0}&idObra={1}",
                                        oc.idComparativo, 
                                        oc.idObra);
           
            List<DocumentoCompraInfo> lista = new List<DocumentoCompraInfo>();
            idColeccion.Value = Parametros.GenerarID().ToString();
            //loadtipoCambio(oc.fechaEmision.Value);
             Moneda tp = DbUtil.Db.Monedas.Single(p => p.idInternal == 4);

             // para evitar inco error, solo se carga segun GO.

             if (oc.idTipoOrden.ToInt() > 1)
             {
                 //retiramos la factura si no existe IGV
                 //if (oc.IGVTotal == 0)
                 //{
                 //    List<ListValueInfo> tipodocumentos = list.GetDocumentoTipoRecepcionDoc();
                 //    tipodocumentos.RemoveAll(p => p.idInternal == 2);
                 //    tipoDocDropDownList.DataSource = tipodocumentos;
                 //    tipoDocDropDownList.DataBind();

                 //}

             }   
 

            if (idordenAnticipo.Value.ToInt() != 0 )
            {
                OrdenAnticipo oca=DbUtil.Db.OrdenAnticipos.Single(p=>p.idInternal==idordenAnticipo.Value.ToInt());

                decimal tipocambio=tp.getTipoCambio(DbUtil.Db,oca.fecha);
                decimal IGV = new Impuesto().GetIGV(DbUtil.Db, oca.fecha);
                DocumentoTipo tipoDocumento = DbUtil.Db.DocumentoTipos.Single(p => p.idInternal == tipoDocDropDownList.SelectedValue.ToInt()); //factura

                ///////-----------orden Compra
                fechaOCLabel.Text = oca.fecha.ToShortDateString();
                totalTextBox.Text = string.Format("{0} {1}", simbol, oca.total.ToString("N"));
                netoLabel.Text = oca.subTotal.ToString("N");
                igvtotalLabel.Text = oca.IGVTotal.ToString("N");
                totalTextBox.Text = oca.total.ToString("N");
                IGVValor.Text = IGV.ToString();
              
                DocumentoCompraInfo nuevo= new DocumentoCompraInfo(Parametros.GenerarID(),
                                                                    oca.OrdenCompra.Proveedor1.ruc,
                                                                    oca.idInternal,
                                                                    'P',
                                                                    ' ',
                                                                    oca.OrdenCompra.idProveedor.Value,
                                                                    null,
                                                                    oca.OrdenCompra.proveedor,
                                                                    tipoDocumento.pg_TIPODOC,
                                                                    tipoDocumento.descripcion,
                                                                    tipoDocumento.idInternal,
                                                                    oca.OrdenCompra.numDocumento,
                                                                    oca.OrdenCompra.fechaEmision.Value,
                                                                    oca.OrdenCompra.fechaEmision.Value,
                                                                    0,
                                                                    oca.OrdenCompra.fechaEmision.Value,
                                                                    oca.OrdenCompra.idComparativo!=null?oca.OrdenCompra.Comparativo.descripcion:oca.OrdenCompra.OrdenCompraItems.First().Descripcion,
                                                                    oca.OrdenCompra.idMoneda.Value,
                                                                    tipocambio,
                                                                    oca.total,
                                                                    oca.IGVTotal,0,0,IGV,"sist1");


                lista.Add(nuevo);
               

                // mostramos los valores para el caso de los anticipos
                var q= from a in DbUtil.Db.OrdenAnticipos
                       where a.idOrden==oca.idOrden
                       select new 
                       {
                           fecha=a.fecha,
                           descripcion=a.descripcion,
                           total = String.Format("{0} {1:N}", simbol, a.total),
                           factura=(a.RecepcionDocs.Count()==0)?"":a.RecepcionDocs.First().numDocumento,
                       };
               
                adelantogridView.DataSource=q.ToList();
                adelantogridView.DataBind();

            }
            else
            {
                decimal tipocambio = tp.getTipoCambio(DbUtil.Db, oc.fechaEmision.Value);
                decimal IGV = new Impuesto().GetIGV(DbUtil.Db, oc.fechaEmision.Value);
  
                //-------------OC
                fechaOCLabel.Text = oc.fechaEmision.Value.ToShortDateString();
                totalTextBox.Text = string.Format("{0} {1}", simbol, oc.total.Value.ToString("N"));
                netoLabel.Text = oc.subTotal.Value.ToString("N");
                igvtotalLabel.Text = oc.IGVTotal.Value.ToString("N");
                totalTextBox.Text = oc.total.Value.ToString("N");
                IGVValor.Text = IGV.ToString();


                DocumentoTipo tipoDocumento = DbUtil.Db.DocumentoTipos.Single(p => p.idInternal == tipoDocDropDownList.SelectedValue.ToInt()); //factura
                DocumentoCompraInfo nuevo = new DocumentoCompraInfo(Parametros.GenerarID(),
                                                                   oc.Proveedor1.ruc,
                                                                   oc.idInternal,
                                                                     'P',
                                                                     ' ',
                                                                   oc.idProveedor.Value,
                                                                   null,
                                                                   oc.proveedor,
                                                                   tipoDocumento.pg_TIPODOC,
                                                                   tipoDocumento.descripcion,
                                                                   tipoDocumento.idInternal,
                                                                   oc.numDocumento,
                                                                   oc.fechaEmision.Value,
                                                                   oc.fechaEmision.Value,
                                                                   0,
                                                                   oc.fechaEmision.Value,
                                                                   oc.idComparativo != null ? 
                                                                        oc.Comparativo.descripcion : 
                                                                        oc.OrdenCompraItems.First().Descripcion,
                                                                    
                                                                   oc.idMoneda.Value,
                                                                   tipocambio,
                                                                   oc.total.Value,
                                                                   oc.IGVTotal.Value,
                                                                   0, 0,IGV, "sist1");


                lista.Add(nuevo);
            }

            
            
              //caso de un solo documento


            
            //caso de Orden Compra
           
            if (oc.idTipoOrden == 5)  //caja chica
            {
                
               
                var numRendicion = (oc.idRendicion != null) ? oc.Rendicion.numDocumento : "";
                var recepcion = new RendicionBL();
                lista = recepcion.GetDocumentoCompra(oc.idRendicion.Value);
                Session[idColeccion.Value] = lista;
                RendicionDocGrid1.Load(idordenCompra.Text, idColeccion.Value);
                GrupoFacturacionPNL.Visible = true;
                facturacionUNOPNL.Visible = false;

            }
            else
            {
                 loadDocummentoCompra(lista.First());
                DocumentoUpdatePanel.Update();
                 tipoCambioUpdatePanel.Update();    
                tipoCambioUpdatePanel.Update();
               
                GrupoFacturacionPNL.Visible = false;
                facturacionUNOPNL.Visible = true;
              
            }

            Session[idColeccion.Value] = lista;
            
           
        }

         private void loadDocummentoCompra(DocumentoCompraInfo nuevo)
         {
             tipoDocDropDownList.SelectedValue= nuevo.tipoDoc.ToString()  ;
                monedaDropDownList.SelectedValue = nuevo.idMoneda.ToString();
                monedaDropDownList.Enabled=true;

                documentoTextBox.Text= nuevo.numDocumento;
                descripcionTextBox.Text= nuevo.glosa;
                
                totalNetoTXT.Text=Math.Round(nuevo.netoDoc,2).ToString();
                totalInafectoTXT.Text= Math.Round(nuevo.impInafecto,2).ToString();
                IGVTXT.Text = Math.Round(nuevo.igvDoc,2).ToString();
                iscTXT.Text= Math.Round(nuevo.impISC,2).ToString();
                totalFinalTXT.Text = Math.Round(nuevo.totalDoc, 2).ToString();

                importeHonorarioTXT.Text= Math.Round(nuevo.totalDoc,2).ToString();
                ImporteNetoTXT.Text= Math.Round(nuevo.importeNeto,2).ToString();
                ren4TXT.Text = Math.Round(nuevo.Renta4ta, 2).ToString();

                fechaEmisonTextBox.Text= nuevo.fechaEmisionStr;
                fechaVencimTextBox.Text= nuevo.fechaVencimientoStr;
                TipoCambioTXT.Text = nuevo.tipoCambio.ToString();


                if (tipoDocDropDownList.SelectedValue != "3")
                {
                    facturaPNL.Visible = true;
                    HonorarioPNL.Visible = false;
                   
                }
                else
                {

                    HonorarioPNL.Visible = true;
                    facturaPNL.Visible = false;
                }
         }
      

        //private void DataBindNotasIngreso()
        //{
        //    guiaRemisionGridView.DataSource = new NotaIngresoBL().GetNotaIngresoListXOrdenCompra(int.Parse(idordenCompra.Text));
        //    guiaRemisionGridView.DataBind();
        //}
       

        protected void adelantogridView_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

       

        #region  SOLO UNO

        private void Insert()
        {
            System.IFormatProvider MiFp = new System.Globalization.CultureInfo("es-ES", false);

            decimal impinafecto = Convert.ToDecimal(totalInafectoTXT.Text);
            decimal isc = Convert.ToDecimal(iscTXT.Text);
            int id = 0;
            List<DocumentoCompraInfo> lista=(List<DocumentoCompraInfo>)Session[idColeccion.Value] ;
            int val=int.Parse(tipoDocDropDownList.SelectedValue);
             var documentoTipo = DbUtil.Db.DocumentoTipos.Single(p=>p.idInternal==val);
            if (val != 3)  //factura,boleta,nc
            {

                lista.First().setFactura(descripcionTextBox.Text,
                                            documentoTextBox.Text,
                                            documentoTipo.pg_TIPODOC,
                                            documentoTipo.descripcion,
                                            documentoTipo.idInternal,
                                            IGVValor.Text.ToDecimal().Value,
                                            DateTime.ParseExact(fechaEmisonTextBox.Text, "dd/MM/yyyy", MiFp),
                                            DateTime.ParseExact(fechaVencimTextBox.Text, "dd/MM/yyyy", MiFp),
                                            fechaPagoDDL.SelectedItem.Text.ToDate().Value,
                                            TipoCambioTXT.Text.ToDecimal().Value,
                                            totalNetoTXT.Text.ToDecimal().Value,
                                            totalFinalTXT.Text.ToDecimal().Value,
                                            IGVTXT.Text.ToDecimal().Value,
                                            impinafecto,
                                             isc);

                RecepcionDocBL recep = new RecepcionDocBL();
                id = recep.AddFromOrdenCompra(FRUNITXT.Text,
                                            FecharecepcionTXT.Text.ToDate().Value,
                                            idordenCompra.Text.ToInt(),
                                            null,
                                            idObra.Value.ToInt(),
                                            envioGPUNOchk.Checked,
                                            lista);

            }
            else
            {

                //RH
                lista.First().SetHonorario(
                        descripcionTextBox.Text,
                        documentoTextBox.Text,
                       documentoTipo.pg_TIPODOC,
                        documentoTipo.descripcion,
                        documentoTipo.idInternal,
                          IGVValor.Text.ToDecimal().Value,
                          DateTime.ParseExact(fechaEmisonTextBox.Text, "dd/MM/yyyy", MiFp),
                          DateTime.ParseExact(fechaVencimTextBox.Text, "dd/MM/yyyy", MiFp),
                          fechaPagoDDL.SelectedItem.Text.ToDate().Value,
                          TipoCambioTXT.Text.ToDecimal().Value,
                          importeHonorarioTXT.Text.ToDecimal().Value,
                          ImporteNetoTXT.Text.ToDecimal().Value,
                           ren4TXT.Text.ToDecimal().Value);


                RecepcionDocBL recep = new RecepcionDocBL();
                id = recep.AddFromOrdenCompra(FRUNITXT.Text,
                        FecharecepcionTXT.Text.ToDate().Value,
                        idordenCompra.Text.ToInt(),
                        null,
                        idObra.Value.ToInt(),
                        envioGPUNOchk.Checked,
                        lista);
            }


           

            internalid.Value = id.ToString();
        }



       

        protected void fechaEmisonTextBox_TextChanged(object sender, EventArgs e)
        {
            try
            {
                //debe existir tipo de  cambio del dolar 
                System.IFormatProvider MiFp = new System.Globalization.CultureInfo("es-ES", false);

                DateTime fechaDocumento = DateTime.ParseExact(fechaEmisonTextBox.Text, "dd/MM/yyyy", MiFp);
                loadtipoCambio(fechaDocumento);
                loadIGV(fechaDocumento);

            }
            catch (SqlException sqlex)
            {

                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                System.IFormatProvider MiFp = new System.Globalization.CultureInfo("es-ES", false);
                fechaEmisonTextBox.Text = fechaOCLabel.Text;
                DateTime fechaDocumento = DateTime.ParseExact(fechaEmisonTextBox.Text, "dd/MM/yyyy", MiFp);
                loadtipoCambio(fechaDocumento);
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }
        }

        private void loadtipoCambio(DateTime fechaDocumento)
        {


            Moneda tp = DbUtil.Db.Monedas.Single(p => p.idInternal == 4);


            TipoCambioTXT.Text = tp.getTipoCambio(DbUtil.Db, fechaDocumento).ToString("N3");
            tipoCambioUpdatePanel.Update();
        }
        private void loadIGV(DateTime fechaDocumento)
        {

            Impuesto impuesto = new Impuesto();
            decimal IGV=impuesto.GetIGV(DbUtil.Db, fechaDocumento);


            IGVValor.Text = IGV.ToString();
            
        }
          
       

        #endregion

        #region  Grupo
        private void InsertGrupo()
        {
            System.IFormatProvider MiFp = new System.Globalization.CultureInfo("es-ES", false);

            //    DocumentoCompraInfo documento= new DocumentoCompraInfo(0,RUC,

            List<DocumentoCompraInfo> lista = (List<DocumentoCompraInfo>)Session[idColeccion.Value];

            RecepcionDocBL recep = new RecepcionDocBL();

            int id = recep.AddFromOrdenCompra(frLabel.Text,
                                           DateTime.ParseExact(fechaTextBox.Text, "dd/MM/yyyy", MiFp),
                                           int.Parse(idordenCompra.Text),
                                           idordenAnticipo.Value.ToInt2(),
                                           int.Parse(idObra.Value),
                                           envioGPGRUPOchk.Checked,
                                             lista);

            // internalid.Value =id.ToString();
        }




        #endregion

        protected void tipoDocDropDownList_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                
                var lista = (List<DocumentoCompraInfo>)Session[idColeccion.Value];
                var documentoTipo=DbUtil.Db.DocumentoTipos.Single(p=>p.idInternal==tipoDocDropDownList.SelectedValue.ToInt());

                lista.First().SetTipoDoc(documentoTipo.idInternal,documentoTipo.pg_TIPODOC,documentoTipo.descripcion);
                loadDocummentoCompra(lista.First());


                
                
                
               }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);
                saveButton.Enabled = true;

            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);
                saveButton.Enabled = true;
            }
        }



    }

}
